package com.pxmeta.circle.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.pxmeta.circle.entity.Circle;
import com.pxmeta.circle.entity.UserCircle;
import com.pxmeta.circle.entity.dto.KickUserDTO;
import com.pxmeta.circle.entity.vo.CircleUserInfoVO;
import com.pxmeta.user.entity.User;
import com.pxmeta.user.entity.vo.CircleUserVO;

import java.util.List;

/**
 * <p>
 * 用户圈子表 服务类
 * </p>
 *
 * @author wcl
 * @since 2022-05-14
 */
public interface IUserCircleService extends IService<UserCircle> {

    /**
     * 获取圈子管理员列表，第一个是圈主，其他都是管理。
     * @param circleId
     * @return
     */
    List<User> getAdminUserByCircleId(Long circleId);


    /**
     * 加入圈子
     * @param userCircle
     */
    void joinCircle(UserCircle userCircle, boolean isInit);

    /**
     * 获取圈子用户列表
     * @param circleId
     * @return
     */
    List<CircleUserVO>getUserList(Long circleId, Integer page, Integer size, String name);

    /**
     * 踢出圈子用户
     * @param dto
     */
    void kickUser(Long userId, KickUserDTO dto);

    CircleUserInfoVO getUserInfo(Long userId, Long circleId);


    /**
     * 转移圈主
     * @param userId
     * @param circleId
     * @param targetUserId
     */
    void transferMaster(Long userId, Long circleId, Long targetUserId);


    UserCircle getByUserIdAndCircleId(Long userId, Long circleId);

    /**
     * 添加管理员
     * @param circleId
     * @param adminUserIds
     */
    void addAdmin(Long ownerId, Long circleId, List<Long> adminUserIds);

    void cancelAdmin(Long circleId, Long ownerId, Long adminUserId);

    /**
     * 解除圈子
     * @param circleId
     */
    void breakCircle(Long circleId, Long ownerId);

    /**
     * 获取用户圈子列表
     * @param userId
     * @return
     */
    List<UserCircle> listByUserId(Long userId);

    /**
     * 获取用户加入的圈子
     * @param userId
     * @return
     */
    List<Circle> getUserCircle(Long userId);

    /**
     * 退出圈子
     * @param userId
     * @param circleId
     * @return
     */
    boolean quit(Long userId, Long circleId);

    /**
     * 判断是否是这个圈子的用户
     * @param userId
     * @param circleId
     * @return
     */
    boolean getIsCircleUser(Long userId, Long circleId);


    /**
     * 增加经验值
     * @param userId 用户id
     * @param circleId 圈子id
     * @param expNum 经验值
     * @return
     */
    void addExp(Long userId, Long circleId, Integer expNum);

    /**
     * 获取圈子中指定性别的用户
     * @param sex
     * @return
     */
    List<User> getUserListBySex(Long circleId, Integer sex);
}
